# 模糊隶属度计算函数
#计算了 max(bright,dark ) 一阶模糊距 阈值
import cv2
def fuzzySets(pic):
    pic = cv2.cvtColor(pic,cv2.COLOR_BGR2GRAY)
    height, width= pic.shape
    # 算出灰度值频率
    hist = cv2.calcHist([pic], [0], None, [256], [0, 256])
    # 求灰度值概率
    p = []
    for i in hist:
        p.append(i / (height * width))

    # 一阶模糊矩
    m = 0
    for i in range(256 - 1):
        m += (i / 255) * p[i];

    #利用公式将图片数值分为 模糊矩阵dark与bright
    u_dark, u_bright = [], []
    a = 0.5                         #a是一个交叉点（这里设置为变量）
    l = (1 - 2 * a) / (a * a)       #拉姆达公式
    for i in range(0, height):
        for j in range(0, width):
            pic_now = pic[i][j]/255
            if pic_now <= a:
                u_dark.append(1 / a * (pic_now ** 2))
            else:
                u_bright.append((1 - (1 / a * (((1 - pic_now) / (1 + l * pic_now)) ** 2))) / (1 + l * (1 / a * (((1 - pic_now) / (1 + l * pic_now)) ** 2))))

    u_bright_max, u_dark_max = [max(u_bright)], [max(u_dark)] #求出他俩的最大值
    #做一个判断如果一阶模糊距大于零点五，那么bright_max 除2 就为 西格玛，反之一样
    if(m<=0.5):
        xgm=u_bright_max[0]/2
    else:
        xgm=u_dark_max[0]/2
    #返回阈值西格玛，为后续程序做铺垫
    return(xgm)